/**
 * @file pt_vad.h
 * @brief 
 * @author yejiahao
 * @date 2024-06-24 02:17:04
 * 
 * @copyright Copyright (c) 2024 by 深圳市鹏天微智能科技有限公司, All Rights Reserved.
 */

#ifndef PT_VAD_H
#define PT_VAD_H

#include "pt.h"

#ifdef __cplusplus
extern "C" {
#endif

#define PCM_BUFFER_SIZE             (192) /*!< 48k,立体声,usb 1ms 产生的 uint8_t pcm buffer 字节 */
#define PCM_STEREO_FRAMES           (PCM_BUFFER_SIZE >> 1) /*!< 48k,立体声,1ms int16_t 个数 */
// #define PCM_MONO_FRAMES             (PCM_STEREO_FRAMES/2) /*!< 单声道 int16_t 个数 */

/* mute state */
// #define HV_DET_PASS_VALUE           (800) /*!< 静音状态下判断讲话的阈值 */
#define HV_DET_PASS_VALUE           (150) /*!< 静音状态下判断讲话的阈值 */
#define HV_DET_WINDOWS_CNT          (20) /*!< 持续大于上面阈值该个数后，切换到 talking state */

/* talking state */
// #define TALK_OVER_DET_PASS_VALUE    (2000) /*!< 讲话状态下判断讲话结束的阈值 */
#define TALK_OVER_DET_PASS_VALUE    (400) /*!< 讲话状态下判断讲话结束的阈值 */
#define TALK_OVER_DET_WINDOWS_CNT   (20) /*!< 持续小于上面阈值指定个数后，切换到 premute state */

/* premute state */
#define PREMUTE_TIME_MS             (200) /*!< 讲话结束后持续这段时间没有再大于 PREMUTE_PASS_VALUE 的值，进入 mute 状态 */
#define PREMUTE_PASS_VALUE          (TALK_OVER_DET_PASS_VALUE)
#define PREMUTE_WINDOWS_CNT         (PREMUTE_TIME_MS * PCM_STEREO_FRAMES)

void pt_vad_test(uint8_t *pcm, uint32_t len);

void pt_vad_peek_pcm(void *pcm, uint32_t len);

#ifdef __cplusplus
}
#endif

#endif /* PT_VAD_H */
